package com._1_8;

import org.junit.Test;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * 内置函数接口类型==> java.util.function
 * <p>
 * 1.Consumer（消费者）：接受单个输入参数且不返回结果
 * 2.Supplier（提供者）：没有参数，返回一个结果
 * 3.Function(函数): 接收两个参数，返回第二个参数类型的数据
 * 4.Predicate（布尔）：接收一个参数，返回布尔值
 */
public class _03_FunctionClass {

    @Test
    public void test() {

        //        Lambada表达式写法
        //        Consumer<Integer> consumer2 = integer -> System.out.println("【FunctionClass】【consumer：accept】==> " + integer);
        Consumer<Integer> consumer = new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println("【FunctionClass】【consumer：accept(Integer integer)】==> " + integer);
            }
        };
        consumer.accept(1);
        //        Lambada表达式写法
        //        Supplier<Integer> supplier2 = () -> {
        //            System.out.println("【FunctionClass】【supplier：get】==> NULL" );
        //            return null;
        //        };
        Supplier<Integer> supplier = new Supplier<Integer>() {
            @Override
            public Integer get() {
                System.out.println("【FunctionClass】【supplier：get()】==> NULL");
                return null;
            }
        };
        supplier.get();

        //        Lambada表达式写法
        //        Function<Integer, Integer> function2 = integer -> {
        //            System.out.println("【FunctionClass】【consumer：accept】==> " + integer);
        //            return null;
        //        };
        Function<Integer, Integer> function = new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                System.out.println("【FunctionClass】【function：apply(Integer integer)】==> " + integer);
                return null;
            }
        };
        function.apply(1);

        //        Lambada表达式写法
        //        Predicate<Integer> predicate2 = o -> {
        //            System.out.println("【FunctionClass】【consumer：accept】==> " + o);
        //            return false;
        //        };
        Predicate<Integer> predicate = new Predicate<Integer>() {
            @Override
            public boolean test(Integer integer) {
                System.out.println("【FunctionClass】【predicate：test(Integer integer)】==> " + integer);
                return false;
            }
        };
        predicate.test(1);

    }

}
